this._workspaceAnimation =
new WorkspaceAnimation.WorkspaceAnimationController();
+
+ this._shellwm.connect('kill-switch-workspace', () => {
+ this._workspaceAnimation.cancelSwitchAnimation();
+ this._switchWorkspaceDone();
+ });
}
async _startX11Services(task, cancellable) {
return;
}
- this._workspaceAnimation.animateSwitch(shellwm, from, to, direction);
+ this._switchInProgress = true;
+
+ this._workspaceAnimation.animateSwitch(from, to, direction, () => {
+ this._shellwm.completed_switch_workspace();
+ this._switchInProgress = false;
+ });
+ }
+
+ _switchWorkspaceDone() {
+ if (!this._switchInProgress)
+ return;
+
+ this._shellwm.completed_switch_workspace();
+ this._switchInProgress = false;
}
_showTilePreview(shellwm, window, tileRect, monitorIndex) {
var WorkspaceAnimationController = class {
constructor() {
- this._shellwm = global.window_manager;
this._movingWindow = null;
-
this._switchData = null;
- this._shellwm.connect('kill-switch-workspace', shellwm => {
- if (this._switchData) {
- if (this._switchData.inProgress)
- this._switchWorkspaceDone(shellwm);
- else if (!this._switchData.gestureActivated)
- this._finishWorkspaceSwitch(this._switchData);
- }
- });
global.display.connect('restacked', this._syncStacking.bind(this));
this.movingWindow = null;
}
- animateSwitch(shellwm, from, to, direction) {
+ animateSwitch(from, to, direction, onComplete) {
this._prepareWorkspaceSwitch(from, to, direction);
this._switchData.inProgress = true;
y: yDest,
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
- onComplete: () => this._switchWorkspaceDone(shellwm),
+ onComplete: () => {
+ this._finishWorkspaceSwitch(this._switchData);
+ onComplete();
+ },
});
}
- _switchWorkspaceDone(shellwm) {
- this._finishWorkspaceSwitch(this._switchData);
- shellwm.completed_switch_workspace();
- }
-
_directionForProgress(progress) {
if (global.workspace_manager.layout_rows === -1) {
return progress > 0
return this._switchData !== null && this._switchData.gestureActivated;
}
+ cancelSwitchAnimation() {
+ if (!this._switchData)
+ return;
+
+ if (this._switchData.gestureActivated)
+ return;
+
+ this._finishWorkspaceSwitch(this._switchData);
+ }
+
set movingWindow(movingWindow) {
this._movingWindow = movingWindow;
}